package com.parking.stall.service;

import com.parking.common.core.model.PageInfo;
import com.parking.stall.dto.CertifiedStallDetailsDTO;
import com.parking.stall.dto.RentersSelectStallDTO;
import com.parking.stall.dto.StallRentDto;
import com.parking.stall.entity.StallInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.parking.stall.param.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 彭于晏
 * @since 2023年11月29日
 */
public interface StallInfoService extends IService<StallInfo> {
    /**
     * platformSelect:平台查询车位信息（分页、带条件）
     * @param param 平台查询车位信息对象
     * @return PageInfo：分页对象
     * @throws Exception
     */
    public PageInfo platformSelect(PlatformSelectStallInfoParam param)throws Exception;

    /**
     * userSelect: 用户查询车位（分页，带条件）
     * @param param：用户查询车位信息对象
     * @return PageInfo:分页对象
     */
    public PageInfo userSelect(UserSelectStallInfoParam param)throws Exception;

    /**
     * certifiedSelect:物业查询车位（分页、带条件）
     * @param param :物业查车位信息参数
     * @return PageInfo：分页对象
     * @throws Exception
     */
    public PageInfo certifiedSelect(CertifiedSelectStallInfoParam param)throws Exception;

    /**
     * addStall:物业新增车位（批量，带条件）
     * @param param:批量新增车位信息
     * @return true/false
     * @throws Exception
     */
    public Boolean addStall(AddStallInfoParam param)throws Exception;

    /**
     * certifiedSetStallState:物业设置车位状态：上下架
     * @param param :物业设置车位上下架参数对象
     * @return Boolean
     * @throws Exception
     */
    public Boolean certifiedSetStallState(CertifiedSetStallStateParam param)throws Exception;

    /**
     * rentersSelect：出租客查询车位
     * @param param 出租客分页分页查询参数
     * @return List<RentersSelectStallDTO> 出租客查询车位(可能多个)信息返回参数
     * @throws Exception
     */
    public PageInfo rentersSelect(RentersSelectStallParam param)throws Exception;

    /**
     * rentersSetUp:出租客设置车位上架（日期，时间批量）
      * @param param :出租客设置车位上架参数
     * @return Boolean
     * @throws Exception
     */
    public Boolean rentersSetUp(RentersSetUpStallParam param)throws Exception;

    /**
     * rentersSetDown:出租客设置车位下架
     * @param stallInId :车位信息id
     * @return Boolean
     * @throws Exception
     */
    public Boolean rentersSetDown(Integer stallInId)throws Exception;


    /**
     * certifiedStallDetails:车位详情（物业根据车位信息id查询车位详情）
     * @param stallInfoId 车位信息id
     * @param certifiedAccountId :物业账号id
     * @return CertifiedStallDetailsDTO：车位信息dto参数对象
     * @throws Exception
     */
    public CertifiedStallDetailsDTO certifiedStallDetails(Integer stallInfoId,Integer certifiedAccountId)throws Exception;

    /**
     * selectStallRentById  用户根据车位信息id查询StallRentDto
     * @param stallInfoId
     * @return StallRentDto
     */
    public StallRentDto selectStallRentById(Integer stallInfoId);
}
